import { Compiler } from './Compiler.js';
import { Observer } from './Observer.js';

// 创建mVue构造函数
export class mVue {
  constructor(options) {
    // 保存选项
    this.$options = options;
    this.$data = options.data;

    // 响应化处理
    new Observer(this.$data);

    // 代理
    proxy(this, '$data');
    console.log('创建编译器');
    // 创建编译器
    new Compiler(options.el, this);
  }
}

// 代理函数，方便用户直接访问$data中的数据
function proxy(vm, sourceKey) {
  // vm[sourceKey]就是vm[$data]
  Object.keys(vm[sourceKey]).forEach(key => {
    // 将$data中的key代理到vm属性中
    Object.defineProperty(vm, key, {
      get() {
        return vm[sourceKey][key];
      },
      set(newVal) {
        vm[sourceKey][key] = newVal;
      }
    });
  });
}
